package com.lanou3g.code0404.morning;

/**
 * Created by dllo on 18/4/4.
 */


 //返回值
public class Foo2 {
    /*
    * 1.add方法作用：接收两个int类型的值，并求和
    * 2.int add(int num1,int num2){}中第一个int 叫做返回值类型
    *   用来表示：这个方法可以返回给调用方法一个什么类型的数据
    *
    * */
    int add(int num1,int num2){
        int result  = num1 + num2;

        //如果 返回值类型这里写的不是void
        // 则这个方法 必须有明确的返回值，即必须写出return 关键字后跟着 要返回的结果
        return result;
    }



    void fun(){
        System.out.println("这个方法没有返回值");
    }


    /*
       return 专门用在方法中，这个关键字的作用是：直接，结束一个方法
       即在return后的代码全部都不会执行
       如果一个方法声明了有返回值，那么必须写"return 返回值"；
       如果一个方法声明了没有返回值（void） ，那么可以省略return，
       并且由于没有返回值，那么即使写了return，后面也不需要写要返回的值

    * */



    //打印一个数组
    void printArr(int[] arr){

    // arr 可以为空，但不能没有new过
        if (arr == null){  //防御式编程；如果这个if不写，叫做契约式编程：默认传过来的arr是new过的
            // System.out.println("你有没有new自己心里没点数么");
            return;    //当执行到return时，方法无条件提前结束
        }
        System.out.print("[");;
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1){
                System.out.print(", ");
            }
        }
        System.out.println("]");
    }

    //但凡我们要改变一个字符串的值，就必须又返回值
    String fun3(String s){
        s = "Echo" + s;
        return s;
    }

    Table fun4(Table a){
        a = new Table();
        a.color = "red";
        a.legCount  = 4;
        return a;

    }

     //补充：可以用 ... 表示不确定个数的参数，不是很常用，但是有这样的写法
     // 在方法里使用的时候，nums其实就是个int类型的数组
//    int addAll(int ... nums){  //括号中可以写成数组int[] nums，调用时同样传数组
//        int  sum = 0;
//        for (int i = 0; i < nums.length; i++) {
//            sum += nums[i];
//        }
//        return sum;
//
//    }

    int addAll(int[] nums){  // 语法糖：括号中可以写成数组int[] nums，调用时同样传数组
        int  sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;

    }








}
